perm filename GETINF.NEW[MUS,LCS] blob sn#319838 filedate 1977-12-06 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	 ******** THIS IS IRCAM VERSION ******
C00011 ENDMK
C⊗;
; ******** THIS IS IRCAM VERSION ******
;****** THIS IS FOR READING SOUND SAMPLE FILES INTO THE MUSIC PROGRAM.
;****** A FILE CALLED 'READ[MUS,LCS]' MUST BE ENTERED INTO 'MUS10' IN
;****** ORDER TO USE THIS FEATURE.  SEE 'USEMUS.LCS[UP,DOC]' FOR INFO.

	TITLE GETINF ; ********* MAY 1977 *********

	INTERNAL GETINF,RDSMPL,getin2,getin3,getin4,rdsmp2,rdsmp3,rdsmp4
	INTERNAL INSR,INCH,INMX ;INSR=SRATE, INCH=NCHNS, INMX=MAXAMP
;;	ENTRY	NOTDD
  	EXTERNAL INFILE,INFIL2,INFIL3,INFIL4
	EXTERNAL AIVECT;This routine forces the display routines to be loaded.
	ch1←11			;CAN READ 4 FILES AT ONCE
	ch2←12
	CH3←13
	ch4←14

DEFINE ERROR (MSG)
<	JSA 16,.ERROR
	JUMP [ASCIZ/MSG/
]
>

;CALL GETINF(ARRAY J,INBT,INDR)
GETINF:	0		;************ INITS FILE AND READS HEADER
	INIT CH1,17
	SIXBIT/DSK/
	0
	ERROR <CAN'T INIT DSK!>
	jfcl
	MOVE 0,INFILE		;GET INPUT FILE NAME
	PUSHj 17,intf4
	LOOKUP CH1,DIR
	OUTSTR [ASCIZ/**** INPUT FILE NOT FOUND ****/]
	PUSHJ 17,GETF3
	INPUT CH1,COM
	STATZ CH1,740000
	0
	JRST GETHD

GETIN2:	0
	INIT CH2,17
	SIXBIT/DSK/
	0
	ERROR <CAN'T INIT DSK!>
	jfcl
	MOVE 0,INFIL2		;GET INPUT FILE NAME 2
	PUSHj 17,intf4
	LOOKUP CH2,DIR
	OUTSTR [ASCIZ/**** INPUT FILE NOT FOUND ****/]
	PUSHJ 17,GETF3
	INPUT CH2,COM
	STATZ CH2,740000
	0
	JRST GETHD

GETIN3:	0
	INIT CH3,17
	SIXBIT/DSK/
	0
	ERROR <CAN'T INIT DSK!>
	jfcl
	MOVE 0,INFIL3		;GET INPUT FILE NAME 3
	PUSHj 17,intf4
	LOOKUP CH3,DIR
	OUTSTR [ASCIZ/**** INPUT FILE NOT FOUND ****/]
	PUSHJ 17,GETF3
	INPUT CH3,COM
	STATZ CH3,740000
	0
	JRST GETHD

GETIN4:	0
	INIT CH4,17
	SIXBIT/DSK/
	0
	ERROR <CAN'T INIT DSK!>
	jfcl
	MOVE 0,INFIL4		;GET INPUT FILE NAME 4
	PUSHj 17,intf4
	LOOKUP CH4,DIR
	OUTSTR [ASCIZ/**** INPUT FILE NOT FOUND ****/]
	PUSHJ 17,GETF3
	INPUT CH4,COM
	STATZ CH4,740000
	0

GETHD:	MOVE 2,COM		;LOCATION OF INPUT ARRAY
	HRRZ 0,2(2)		;SECOND WD OF ARRAY = SRATE
	FLTR 0,0
	MOVEM 0,INSR#  		;INSR = SRATE
	HRRZ 0,3(2)
	FLTR 0,0
	MOVEM 0,@1(16)		;INBT    BITS   0=12, 1=18
	FLTR 0,4(2)
	MOVEM 0,INCH# 		;INCH    NCHNS
;;	FLTR 0,5(2)
	MOVE 0,5(2)
;;;	CAML 0,[=500000]	;IS IT FLOATING?
;;;	KIFIX 0,0			; YES, FIX IT.
	MOVEM 0,INMX#		;INMX    MAXAMPL
	FLTR 0,6(2)		;LOOK FOR SAMPLE COUNT IN 6TH WD.
	JUMPN 0,SMPLS		;IF ZERO THEN FIGURE IT FROM WDCNT
;;;	MOVE 0,DIR+5		;IRCAM WDCNT
	MOVS 0,DIR+3
	MOVNS 0			;GETS THE WDCNT AT STANFORD
	SUBI 0,=128		;SUBTRACT HEADER LENGTH
	MOVEI 1,3 
	SKIPE @1(16)		; BITS, 0 OR 1?
	SOJ 1,			; BITS = 1, CHANGE MULTIPLIER TO 2
	IMUL 0,1
	FLTR 0,0
SMPLS:	MOVEM 0,@2(16)		;INDR   SAMPLE COUNT
	JRA 16,3(16)


;;INTF4:	MOVE 0,INFILE
INTF4:	MOVEM 0,FILNAM#
	MOVE 1,[POINT 7,@FILNAM]
INTF3:	MOVE 2,[POINT 6,DIR]
	SETZM DIR
;;INTF3:	MOVE 2,[POINT 6,DIR+2]   ;THIS FOR IRCAM
;;	SETZM DIR+2
	MOVEI 3,5      ;****** 5-LETTER NAMES ONLY FOR NOW ********
INTF1:	ILDB 0,1
	JUMPE 0,INTF2
	CAIN 0," "
	JRST INTF2
	SUBI 0,40
	IDPB 0,2
	SOJG 3,INTF1

INTF2:	MOVE 0,[SIXBIT/SND/]	;SND IS ONLY ACCEPTABLE EXTENSION.
	MOVEM 0,DIR+1
	SETZM DIR+2
	SETZM DIR+3		;ZERO THESE SO PPN IS OK ON RERUNS.
;;	MOVEM 0,DIR+3 	; FOR IRCAM
;;	SETZM DIR+4
;;	SETZM DIR+1
	POPJ 17,

GETF3:	HRRZ 0,0(16)
	SUBI 0,1
	MOVEM 0,COM
	MOVNI 0,=128 
	HRLM 0,COM
	POPJ 17,

DIR:	5
	BLOCK 5

;CALL RDSMPL(<ARRAY>,BITS)   BITS=1536(12-BIT) OR 1024(18-BIT)
RDSMPL:	0		  ;************** READS THE SAMPLES
	PUSHJ 17,SETCOM
	INPUT CH1,COM
	STATZ CH1,740000
	0
	JRST RDARY

RDSMP2:	0
	PUSHJ 17,SETCOM
	INPUT CH2,COM
	STATZ CH2,740000
	0
	JRST RDARY

RDSMP3:	0
	PUSHJ 17,SETCOM
	INPUT CH3,COM
	STATZ CH3,740000
	0
	JRST RDARY

RDSMP4:	0
	PUSHJ 17,SETCOM
	INPUT CH4,COM
	STATZ CH4,740000
	0


RDARY:	SETZ 5,		;THE COUNTER
	MOVE 1,(16)	;FIRST LOCATION OF ARRAY
;;	MOVE 6,INARY    	;1025TH LOC OF ARRAY (LAST 1/3)
	KIFIX 0,@1(16)		;BITS, 0 OR 1
	MOVEI 4,3	;12-BIT
	SUB 4,0		; 18-BIT IF AC ZERO IS 1
UNPAC:	AOJ 6,		;MOVE INPUT POINTER
	MOVE 2,(6)	;BEGINNING OF LOOP
	JUMPN 0,HALFWD 	;JUMP IF 18-BIT
	LSHC 2,-14	; FOR 12 BIT
	ASH 3,-30
	FLTR 3,3	;ALL SAMPLES MUST BE IN FLOATING POINT.
	MOVEM 3,2(1)
	LSHC 2,-14
	ASH 3,-30
	FLTR 3,3	;ALL SAMPLES MUST BE IN FLOATING POINT.
	MOVEM 3,1(1)
	LSHC 2,-14
	ASH 3,-30
	FLTR 3,3	;ALL SAMPLES MUST BE IN FLOATING POINT.
	MOVEM 3,(1)
	JRST UPCNT
HALFWD:	HLRE 3,2     	; GET LEFT HALF (1ST SAMPLE)
	FLTR 3,3
	MOVEM 3,(1)
;;	MOVEM 3,1(1)
	HRRE 3,2      	; GET RIGHT HALF - 2ND SMPL
	FLTR 3,3	; HRRE THE 'E'=EXTEND - KEEPS RIGHT SIGN.
	MOVEM 3,1(1)
UPCNT:	ADD 1,4		;MOVE UP ARRAY POINTER 2 OR 3
	CAIE 5,=511
	AOJA 5,UNPAC	;GO BACK FOR MORE
	JRA 16,2(16)

SETCOM:	HRRZ 6,0(16) 
	ADDI 6,=1023     ;READ 512 WDS INTO LAST 1/3 OF 1536 WD ARRAY.
	MOVEM 6,COM
;;	MOVEM 0,INARY#	 ;POINTS TO START OF INPUT
	MOVNI 0,=512
	HRLM 0,COM
	SETZM COM+1
	POPJ 17,

COM:	OCT 0,0
.ERROR:	0
	OUTSTR [ASCIZ/?
/]				;MAKE SURE HE CAN SEE HIS ERROR
	OUTSTR @(16)		;OUTPUT ERROR MESSAGE
	CALLI 1,12		;LET USER CONTINUE
	JRA 16,1(16)

;FUNCTION NOTDD(K)  --  IF NEG. IT'S NOT A DATADISC -- FOR 'SEE'
;;NOTDD↑:	0
;;	MOVNI	2,1
;;	GETLIN	2
;;	SETZ	;0=IT IS A DD
;;	TLNN	2,20000
;;	SETO	;-1=NOT DD
;;	JRA	16,1(16)

	END